package com.ruoyi.pack.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.pack.domain.WayBill;
import java.util.List;

/**
 * 运单Service接口
 * @Author: jeecg-boot
 * @Date:   2025-01-26
 * @Version: V1.0
 */
public interface IWayBillService extends IService<WayBill> {

    /**
     * 查询运单列表
     *
     * @param wayBill 运单查询条件
     * @return 运单集合
     */
    public List<WayBill> selectWayBillList(WayBill wayBill);

    // ==================== 位置跟踪相关方法 ====================

    /**
     * 根据定位器ID查询运单
     *
     * @param locatorId 定位器ID
     * @return 运单信息
     */
    WayBill selectWayBillByLocatorId(Long locatorId);

    /**
     * 根据定位器编码查询运单
     *
     * @param locatorCode 定位器编码
     * @return 运单信息
     */
    WayBill selectWayBillByLocatorCode(String locatorCode);

    /**
     * 更新运单位置信息
     *
     * @param wayBill 运单信息
     * @return 更新结果
     */
    int updateWayBillLocation(WayBill wayBill);

    /**
     * 绑定运单与定位器
     *
     * @param wayBillId 运单ID
     * @param locatorId 定位器ID
     * @param locatorCode 定位器编码
     * @return 绑定结果
     */
    int bindLocator(String wayBillId, Long locatorId, String locatorCode);

    /**
     * 解绑运单与定位器
     *
     * @param wayBillId 运单ID
     * @return 解绑结果
     */
    int unbindLocator(String wayBillId);



    /**
     * 强制解绑运单与定位器（使用UpdateWrapper确保NULL值设置）
     *
     * @param wayBillId 运单ID
     * @return 解绑结果
     */
    boolean forceUnbindLocator(String wayBillId);

    /**
     * 查询延迟运单列表
     *
     * @return 延迟运单集合
     */
    List<WayBill> selectDelayedWayBills();

    /**
     * 查询待交接运单列表
     *
     * @return 待交接运单集合
     */
    List<WayBill> selectPendingHandoverWayBills();
}
